using System;
using System.Collections.Generic;
using System.Linq;
using QuickBencher;

namespace SampleBenchmarks
{
    //public class Recursion_vs_stack_based_algorithm : Runnable
    //{
    //    public void Run()
    //    {
    //        var first = new Tower(100);
    //        var second = new Tower(0);
    //        var third = new Tower(0);

    //        Benchmark.Bm(x => 
    //        {
    //            new RecursionBased().Towers(10, first, second, third);
    //        });
    //    }

    //    public class Tower
    //    {
    //        private Stack<object> _stack;
    //        public Tower(int numberOfDisks)
    //        {
    //            _stack = new Stack<object>();
    //            for (int i = 0; i < numberOfDisks; i++)
    //                _stack.Push(new object());
    //        }
    //        public void Push(object disk)
    //        {
    //            _stack.Push(disk);
    //        }
    //        public object Pop()
    //        {
    //            return _stack.Pop();
    //        }
    //    }
    //    public class RecursionBased
    //    {
    //        public void Towers(int n, Tower source, Tower destination, Tower auxiliary)
    //        {
    //            if (n == 1)
    //                destination.Push(source.Pop());
    //            else
    //            {
    //                Towers(n - 1, source, auxiliary, destination);
    //                Towers(n, source, destination, auxiliary);
    //                Towers(n - 1, auxiliary, destination, source);
    //            }
    //        }
    //    }
    //}
}
